package com.wx.sftp;

import com.wx.sftp.share.SaasDir;
import com.wx.sftp.utils.Image;
import org.jetbrains.annotations.Nullable;

import java.io.Closeable;
import java.io.InputStream;
import java.util.List;
import java.util.Vector;

/**
 * @author 刘畅
 * @date 2018-12-06 20:27
 */
@SuppressWarnings("unused")
public interface SaasFtp extends Closeable {

  /**
   * 上传文件
   *
   * @param inputStream InputStream
   * @param dir         上传目录
   * @param fileName    文件名
   * @return 上传后的可访问url
   */
  @Nullable
  String upload(InputStream inputStream, SaasDir dir, String fileName);

  @Nullable
  String uploadVedio(InputStream inputStream, SaasDir dir, String fileName, Boolean needHls);
  /**
   * 上传Base64图片文件
   *
   * @param base64Str base64编码必填（去掉"data:image/jpeg;base64,"头）
   * @param dir       需要上传的文件夹在服务器中的位置
   * @param fileName  文件名称,abc.jpg
   * @return 上传后的可访问url
   */
  @Nullable
  String uploadBase64Image(String base64Str, SaasDir dir, String fileName);

  /**
   * 删除文件
   *
   * @param file 要删除的文件,目录/文件名
   * @return boolean
   */
  boolean delete(String file);

  /**
   * 删除文件
   *
   * @param directory 文件所在目录路径
   * @param fileName  文件名
   * @return boolean
   */
  boolean delete(String directory, String fileName);

  /**
   * 通过文件URL访问地址删除文件
   *
   * @param url https://fileserver_smartbuilding.ctwing.cn/images/ib/device/aaa/aaa.jpg
   * @return boolean
   */
  boolean deleteFileByUrl(String url);

  /**
   * 通过文件URL访问地址批量删除文件
   *
   * @param url https://fileserver_smartbuilding.ctwing.cn/images/ib/device/aaa/aaa.jpg
   */
  void deleteFileByUrl(List<String> url);

  /**
   * 下载文件
   *
   * @param directory 下载目录 /home/name
   * @param fileName  下载的文件名 xxx.jpg
   * @return InputStream
   */
  InputStream download(String directory, String fileName);

  /**
   * 下载文件
   *
   * @param file 下载的文件 /home/name/xxx.jpg
   * @return InputStream
   */
  InputStream download(String file);

  /**
   * 判断目录是否存在
   *
   * @param directory 文件路径
   * @return 存在则返回true
   */
  boolean dirIsExist(String directory);

  /**
   * 判断目录是否存在
   *
   * @param directory 文件路径
   * @return 不存在则返回true
   */
  boolean dirIsNotExist(String directory);

  /**
   * 创建文件夹
   *
   * @param directory 文件夹路径
   * @return boolean
   */
  boolean mkdir(String directory);

  /**
   * 清空文件
   *
   * @param directory 文件夹路径
   * @return boolean
   */
  boolean clearDir(String directory);

  /**
   * 删除文件夹
   *
   * @param directory 文件夹路径
   * @return boolean
   */
  boolean rmdir(String directory);

  /**
   * 批量上传
   *
   * @param imageList 图片集合
   * @param dir       存储路径信息
   * @return URLs
   */
  List<String> batchUploadImage(List<Image> imageList, SaasDir dir);

  Vector ls(String path);

  boolean fstpmv(String command);
}
